﻿using Simple.Admin.System.Enums;
using System;
using System.Collections.Generic;
using Volo.Abp.Domain.Entities;

namespace Simple.Admin.System;

public class MenuEntity : Entity<Guid>
{

    public MenuEntity()
    {
        
    }

    public MenuEntity(Guid id):base(id)
    {
    }

    /// <summary>
    /// 菜单名字
    /// </summary>
    public string Name { get; set; } = string.Empty;

    /// <summary>
    /// 菜单类型
    /// </summary>
    public MenuTypeEnum Type { get; set; } = MenuTypeEnum.Menu;

    /// <summary>
    /// 父级Id（顶级菜单为 null）
    /// </summary>
    public Guid? ParentId { get; set; }

    /// <summary>
    /// 菜单路径
    /// </summary>
    public string Path { get; set; } = string.Empty;

    /// <summary>
    /// 菜单组件路径
    /// </summary>
    public string? Component { get; set; }

    /// <summary>
    /// 重定向地址（如：/redirect）
    /// </summary>
    public string Redirect { get; set; } = string.Empty;

    /// <summary>
    /// 激活图标（菜单）
    /// </summary>
    public string? ActiveIcon { get; set; }

    /// <summary>
    /// 当前激活的菜单（用于需要激活父级菜单的场景）
    /// </summary>
    public string? ActivePath { get; set; }

    /// <summary>
    /// 是否固定标签页（默认 false）
    /// </summary>
    public bool AffixTab { get; set; } = false;

    /// <summary>
    /// 固定标签页的排序权重（默认 0）
    /// </summary>
    public int AffixTabOrder { get; set; } = 0;

    /// <summary>
    /// 允许访问的角色标识集合（默认空集合）
    /// </summary>
    public List<string> Authority { get; set; } = new List<string>();

    /// <summary>
    /// 徽标文本内容（如数字角标）
    /// </summary>
    public string? Badge { get; set; }

    /// <summary>
    /// 徽标显示类型（点状/常规）
    /// </summary>
    public BadgeTypeEnum? BadgeType { get; set; }

    /// <summary>
    /// 徽标颜色主题（支持预设值或自定义颜色）
    /// 可选值：default | destructive | primary | success | warning | 其他自定义值
    /// </summary>
    public string? BadgeVariants { get; set; }

    /// <summary>
    /// 隐藏子级菜单（默认 false）
    /// </summary>
    public bool HideChildrenInMenu { get; set; } = false;

    /// <summary>
    /// 在面包屑中隐藏（默认 false）
    /// </summary>
    public bool HideInBreadcrumb { get; set; } = false;

    /// <summary>
    /// 在菜单中隐藏（默认 false）
    /// </summary>
    public bool HideInMenu { get; set; } = false;

    /// <summary>
    /// 在标签页中隐藏（默认 false）
    /// </summary>
    public bool HideInTab { get; set; } = false;

    /// <summary>
    /// 菜单图标（支持图标组件名或 URL）
    /// </summary>
    public string? Icon { get; set; }

    /// <summary>
    /// 内嵌 iframe 的 URL 地址
    /// </summary>
    public string? IframeSrc { get; set; }

    /// <summary>
    /// 忽略权限校验（默认 false）
    /// </summary>
    public bool IgnoreAccess { get; set; } = false;

    /// <summary>
    /// 是否开启 KeepAlive 缓存
    /// </summary>
    public bool? KeepAlive { get; set; }

    /// <summary>
    /// 外链跳转地址（优先于路由路径）
    /// </summary>
    public string? Link { get; set; }

    /// <summary>
    /// 路由是否已加载（内部状态标识）
    /// </summary>
    public bool? Loaded { get; set; }

    /// <summary>
    /// 标签页最大允许打开数量（注意：原配置可能存在类型冲突）
    /// </summary>
    public int MaxNumOfOpenTab { get; set; }

    /// <summary>
    /// 菜单可见但访问受限（跳转 403）
    /// </summary>
    public bool MenuVisibleWithForbidden { get; set; } = false;

    /// <summary>
    /// 禁用基础布局（仅顶级路由有效）
    /// </summary>
    public bool NoBasicLayout { get; set; } = false;

    /// <summary>
    /// 在新窗口打开链接
    /// </summary>
    public bool OpenInNewWindow { get; set; } = false;

    /// <summary>
    /// 菜单排序权重
    /// </summary>
    public int? Order { get; set; }

    /// <summary>
    /// 路由附加参数（键值对集合）
    /// </summary>
    public Dictionary<string, object>? Query { get; set; }

    /// <summary>
    /// 路由标题（必填项）
    /// </summary>
    public string Title { get; set; } = string.Empty;

    public virtual List<MenuEntity> Children { get; set; } = [];
}


